/*
    Kelompok    2
    Kelas       2
    Anggota :
    1. Yudha Wastu Prawira      / 13509002
    2. Robertus Theodore        / 13509008
    3. Rendy Bambang Junior     / 13509036
    4. Hartono Sulaiman Wijaya  / 13509046
    5. Daniel Prihartoni        / 13509088
    6. Raydhitya Yosep          / 13509092

*/

#ifndef _PLAYER_H
#define _PLAYER_H

#include "Resource.h"
#include "Farm.h"
#include <vector>
#include <string>
#include <iostream>
#include "Constant.h"
#include "Farmer.h"

class Player : public Farmer {
	public :
		//ctor
		Player ();
		Player (string);
		//dtor
		~Player();
		//inisialisasi;
		void initialize();
		void initialize(SaveInfo);

		//get & set
		//mendapatkan area player
		AreaType getCurArea();
		//mendapatkan waktu yang tersisa untuk player
		Time getTimeLeft();
		//mendapatkan daftar inventory player
		Inventory getMyInventory();
		//mendapatkan nama player
		string getName();
		//mendapatkan saldo player
		int getBalance();
		//menteleport player ke area lain
		void teleport(AreaType);
		//getter day
		int getDay();

		//farm method
		//cangkul terrain di depan bila isPlowable. jika berhasil, return true, gagal, return false
		void plow(Farm&);
		//tanam terrain di depannya bila isPlantable dan bibitnya ada di slot tersebut. jika berhasil, return true, gagal, return false
		void seed(Farm&,int);
		//jika tanaman didepannya dapat dipanen, return true dan tambahkan inventory. jika inventory penuh atau tanaman tidak harvestable, return false
		bool harvest(Farm&);
		//jual barang di inventory jika itu buah dan jumlahnya cukup dan return true, else, return false
		void incBalance(int);
        //cek apakah dapat dimakan atau tidaks
		bool isCanEat(int slot);
        //memakan item pada suatu slot
        bool eating(int);
		//home method
		//set timeLeft to MAX_TIME
		void sleep();
		//kurangi waktu player
		void decTimeLeft();

		//store method
		bool sell(int,int); //if it's fruit in that slot, return true and decrease inventory, else false
		bool buy(ItemType,int); //if balance is sufficient, return true and increase inventory, else false

		//mengetahui jenis item dari slot (SEED/FRUIT)
		ItemType getItemType(int);

		//mengembalikan true bila player menghadap jalan
		bool isFaceRoad();

		//mendapatkan saveinfo player
		void getSaveInfo(SaveInfo&);

	private :
		//attribute
		//Player's name
		string name;
		//Player's money
		int	balance;
		//vector of item
		Inventory myInventory;
		//player's current Area (Home/Farm/Store)
		AreaType curArea;
		//time left for player to act
		Time timeLeft;
		//hari sejak permainan dimulai
		int day;

		//method
		//decrease player's balance
		void decBalance(int);
		//bersihkan inventory dari barang berjumlah kosong
		Inventory cleanInventory(Inventory);

};

#endif
